大家好,我是一名菜鳥工程師,Chris,今天來到第 23 天,JS 的 Closure 閉包
函式和該函式被宣告時所在的作用域環境 (lexical environment) 的組合。它是程式語言的一種特性,也被廣泛應用在 JavaScript 中
比較白話的說法,就是內部函式能夠取得函式外部的變數,並且記住這個變數。而由於能夠記住這個外部變數,閉包很常被用來做狀態保存
1 封裝變數:閉包可以將變數封裝在函式內部
2 訪問外部變數:閉包可以訪問和使用其所在作用域中的外部變數
3 將函式當做值來傳遞:由於閉包將函式和環境綁定在一起,因此可以將閉包當做值來傳遞和使用
1 函式作為返回值:在一個函式中定義一個內部函式,並在最後返回這個內部函式
function hi() {
// 外部函式
let n = 1;
function test() {
// 內部函式
n += 1;
console.log(n);
}
return test;
}
const test = hi();
test(); // 2
test(); // 3
test(); // 4
test
函式,能拿到外部函式 hi
的 n
變數,並保存在記憶體中test
時,會回傳 2、3、4
,是因為之前的 n
狀態被記住了2 將函式作為參數:將一個函式當做參數傳遞給另一個函式
function outer() {
let test = "Hello";
return function inner(callback) {
callback();
}
}
let newFunction = outer();
newFunction(function() {
console.log("回呼函數被調用");
});
1 私有變數和保護變數:通過閉包,可以實現封裝和隱藏變數
2 減少全域變數的污染:使用閉包可以將變數限定在函式的作用域內
3 實現某些功能:例如模組化程式碼、緩存、迭代器等
1 可能導致內存洩漏:由於閉包可以引用外部環境中的變數,因此如果不妥當的使用,可能會導致內存洩漏問題
2 可能會影響效能:閉包會增加函式的複雜度和運行時間,因此高效率運行下,閉包可能會影響程式碼的效能
★總結 : 以上就是關於閉包的說明
今天就介紹到這邊,那我們明天見囉~~
明天預計內容:JS 的遞迴!!!